home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / SpriteFight 2002 v2.0a1 / Sprite.h < prev    next >
Encoding:
Text File  |  1995-12-19  |  7.0 KB  |  295 lines  |  [TEXT/KAHL]

  1. ///--------------------------------------------------------------------------------------
  2. //    Sprite.h
  3. //
  4. //    Created:    Tuesday, October 27, 1992 at 10:10:06 PM
  5. //    By:        Tony Myles
  6. //
  7. //    Copyright: © 1991-94 Tony Myles, All rights reserved worldwide
  8. //
  9. //    Description:    constants, structures, and prototypes for sprites
  10. ///--------------------------------------------------------------------------------------
  11.  
  12.  
  13. #ifndef __SPRITE__
  14. #define __SPRITE__
  15.  
  16. #ifndef __SWCOMMON__
  17. #include "SWCommonHeaders.h"
  18. #endif
  19.  
  20. #ifndef __TIMER__
  21. #include <Timer.h>
  22. #endif
  23.  
  24. #ifndef __FRAME__
  25. #include "Frame.h"
  26. #endif
  27.  
  28.  
  29. ///--------------------------------------------------------------------------------------
  30. //    time task data structure
  31. ///--------------------------------------------------------------------------------------
  32.  
  33. typedef struct TimeTaskRec TimeTaskRec;
  34. typedef TimeTaskRec *TimeTaskPtr, **TimeTaskHdl;
  35.  
  36. struct TimeTaskRec
  37. {
  38.     TMTask timeTask;
  39.     Boolean hasTaskFired;
  40. };
  41.  
  42. #ifndef NewTimerProc
  43. #define NewTimerProc(x) (x)
  44. #endif
  45.  
  46.  
  47. ///--------------------------------------------------------------------------------------
  48. //    sprite type definitions
  49. ///--------------------------------------------------------------------------------------
  50.  
  51. typedef struct SpriteRec SpriteRec;
  52. typedef SpriteRec *SpritePtr, **SpriteHdl;
  53.  
  54. #ifdef __cplusplus
  55. extern "C" {
  56. #endif
  57.  
  58. typedef SW_FUNC void (*DrawProcPtr)(
  59.     FramePtr srcFrameP,
  60.     FramePtr dstFrameP,
  61.     Rect *srcRect,
  62.     Rect *dstRect);
  63.  
  64. typedef SW_FUNC void (*FrameProcPtr)(
  65.     SpritePtr srcSpriteP,
  66.     FramePtr curFrameP,
  67.     long *frameIndex);
  68.  
  69. typedef SW_FUNC void (*MoveProcPtr)(
  70.     SpritePtr srcSpriteP,
  71.     Point *spriteLoc);
  72.  
  73. typedef SW_FUNC void (*CollideProcPtr)(
  74.     SpritePtr srcSpriteP,
  75.     SpritePtr dstSpriteP,
  76.     Rect* sectRect);
  77.  
  78. #ifdef __cplusplus
  79. };
  80. #endif
  81.  
  82. ///--------------------------------------------------------------------------------------
  83. //    sprite data structure
  84. ///--------------------------------------------------------------------------------------
  85.  
  86. struct SpriteRec
  87. {
  88.     SpritePtr nextSpriteP;                    // next sprite
  89.     SpritePtr prevSpriteP;                    // previous sprite
  90.     SpritePtr nextActiveSpriteP;
  91.     SpritePtr nextIdleSpriteP;
  92.  
  93.         // drawing fields
  94.     Boolean isVisible;                        // draw the sprite?
  95.     Boolean needsToBeDrawn;                    // sprite has changed, needs to be drawn
  96.     Boolean needsToBeErased;                // sprite needs to be erased onscreen
  97.     char pad1;
  98.     Rect destFrameRect;                        // frame destination rectangle
  99.     Rect oldFrameRect;                        // last frame destination rectangle
  100.     Rect deltaFrameRect;                        // union of the sprite’s lastRect and curRect
  101.     RgnHandle screenMaskRgn;                // mask region for drawing sprite to screen
  102.     DrawProcPtr frameDrawProc;                // callback to draw sprite
  103.  
  104.         // frame fields
  105.     TimeTaskRec frameTimeTask;                // frame advance time task
  106.     FramePtr *frameArray;                    // array of frames
  107.     FramePtr curFrameP;                        // current frame
  108.     long numFrames;                            // number of frames
  109.     long maxFrames;                            // maximum number of frames
  110.     long frameTimeInterval;                    // time interval to advance frame
  111.     long frameAdvance;                        // amount the adjust frame index
  112.     long curFrameIndex;                        // current frame index
  113.     long firstFrameIndex;                    // first frame to advance
  114.     long lastFrameIndex;                        // last frame to advance
  115.     FrameProcPtr frameChangeProc;            // callback to change frames
  116.  
  117.         // movement fields
  118.     TimeTaskRec moveTimeTask;                // movement time task
  119.     long moveTimeInterval;                    // time interval to move sprite
  120.     short horizMoveDelta;                    // horizontal movement delta
  121.     short vertMoveDelta;                        // vertical movement delta
  122.     Rect moveBoundsRect;                        // bounds of the sprite’s movement
  123.     MoveProcPtr spriteMoveProc;            // callback to handle movement
  124.  
  125.         // collision detection fields
  126.     Rect collideRect;                            // collision detection rectangle (not used currently)
  127.     CollideProcPtr spriteCollideProc;    // callback to handle collisions
  128.  
  129.         // miscellaneous
  130.     // Originally type 'long' (4 bytes); I use type 'double' (8 bytes)
  131.     double userData;                                // reserved for user
  132. };
  133.  
  134.  
  135. ///--------------------------------------------------------------------------------------
  136. //    sprite function prototypes
  137. ///--------------------------------------------------------------------------------------
  138.  
  139. #ifdef __cplusplus
  140. extern "C" {
  141. #endif
  142.  
  143. SW_FUNC OSErr SWCreateSprite(
  144.     SpritePtr* newSpriteP,
  145.     void* spriteStorageP,
  146.     short maxFrames);
  147.  
  148. SW_FUNC OSErr SWCreateSpriteFromCIconResource(
  149.     SpritePtr* newSpriteP,
  150.     void* spriteStorageP,
  151.     short cIconID,
  152.     short maxFrames,
  153.     MaskType maskType);
  154.  
  155. SW_FUNC OSErr SWCreateSpriteFromPictResource(
  156.     SpritePtr* newSpriteP,
  157.     void* spriteStorageP,
  158.     short pictResID,
  159.     short maskResID,
  160.     short maxFrames,
  161.     MaskType maskType);
  162.  
  163. SW_FUNC OSErr SWCloneSprite(
  164.     SpritePtr cloneSpriteP,
  165.     SpritePtr *newSpriteP,
  166.     void* spriteStorageP);
  167.  
  168. SW_FUNC void SWDisposeSprite(
  169.     SpritePtr oldSpriteP);
  170.  
  171. SW_FUNC void SWCloseSprite(
  172.     SpritePtr deadSpriteP);
  173.  
  174. SW_FUNC void SWLockSprite(
  175.     SpritePtr srcSpriteP);
  176.  
  177. SW_FUNC void SWUnlockSprite(
  178.     SpritePtr srcSpriteP);
  179.  
  180. SW_FUNC void SWSetSpriteDrawProc(
  181.     SpritePtr srcSpriteP,
  182.     DrawProcPtr drawProc);
  183.  
  184. SW_FUNC OSErr SWAddFrame(
  185.     SpritePtr srcSpriteP,
  186.     FramePtr newFrameP);
  187.  
  188. SW_FUNC void SWRemoveFrame(
  189.     SpritePtr srcSpriteP,
  190.     FramePtr oldFrameP);
  191.  
  192. SW_FUNC void SWSetCurrentFrame(
  193.     SpritePtr srcSpriteP,
  194.     FramePtr curFrameP);
  195.  
  196. SW_FUNC void SWSetCurrentFrameIndex(
  197.     SpritePtr srcSpriteP,
  198.     short frameIndex);
  199.  
  200. SW_FUNC void SWSetSpriteFrameAdvance(
  201.     SpritePtr srcSpriteP,
  202.     short frameAdvance);
  203.  
  204. SW_FUNC void SWSetSpriteFrameRange(
  205.     SpritePtr srcSpriteP,
  206.     short firstFrameIndex,
  207.     short lastFrameIndex);
  208.  
  209. SW_FUNC void SWSetSpriteFrameTime(
  210.     SpritePtr srcSpriteP,
  211.     long timeInterval);
  212.  
  213. SW_FUNC void SWSetSpriteFrameProc(
  214.     SpritePtr srcSpriteP,
  215.     FrameProcPtr frameProc);
  216.  
  217. SW_FUNC void SWMoveSprite(
  218.     SpritePtr srcSpriteP,
  219.     short horizLoc,
  220.     short vertLoc);
  221.  
  222. SW_FUNC void SWOffsetSprite(
  223.     SpritePtr srcSpriteP,
  224.     short horizDelta,
  225.     short vertDelta);
  226.  
  227. SW_FUNC void SWSetSpriteLocation(
  228.     SpritePtr srcSpriteP,
  229.     short horizLoc,
  230.     short vertLoc);
  231.  
  232. SW_FUNC void SWSetSpriteMoveBounds(
  233.     SpritePtr srcSpriteP,
  234.     Rect* moveBoundsRect);
  235.  
  236. SW_FUNC void SWSetSpriteMoveDelta(
  237.     SpritePtr srcSpriteP,
  238.     short horizDelta,
  239.     short vertDelta);
  240.  
  241. SW_FUNC void SWSetSpriteMoveTime(
  242.     SpritePtr srcSpriteP,
  243.     long timeInterval);
  244.  
  245. SW_FUNC void SWSetSpriteMoveProc(
  246.     SpritePtr srcSpriteP, MoveProcPtr moveProc);
  247.  
  248. SW_FUNC void SWBounceSpriteMoveProc(
  249.     SpritePtr srcSpriteP,
  250.     Point* spritePoint);
  251.  
  252. SW_FUNC void SWWrapSpriteMoveProc(
  253.     SpritePtr srcSpriteP,
  254.     Point* spritePoint);
  255.  
  256. SW_FUNC void SWSetSpriteCollideProc(
  257.     SpritePtr srcSpriteP,
  258.     CollideProcPtr collideProc);
  259.  
  260. SW_FUNC void SWSetSpriteVisible(
  261.     SpritePtr srcSpriteP,
  262.     Boolean isVisible);
  263.  
  264. SW_FUNC Boolean SWIsSpriteInRect(
  265.     SpritePtr srcSpriteP,
  266.     Rect* testRect);
  267.  
  268. SW_FUNC Boolean SWIsPointInSprite(
  269.     SpritePtr srcSpriteP,
  270.     Point testPoint);
  271.  
  272. SW_FUNC void SWStdDrawProc(
  273.     FramePtr srcFrameP,
  274.     FramePtr dstFrameP,
  275.     Rect* srcRect,
  276.     Rect* dstRect);
  277.  
  278. #if defined(powerc) || defined(__powerc)
  279. pascal void SWTimeTask(
  280.     TMTaskPtr tmTaskPtr);
  281. #else
  282. pascal void SWTimeTask(void);
  283. #endif
  284.  
  285. SW_FUNC Boolean SWIsTaskPrimed(
  286.     TMTask* tmTaskP);
  287.  
  288. #ifdef __cplusplus
  289. };
  290. #endif
  291.  
  292.  
  293. #endif    /* __SPRITE__ */
  294.  
  295.